Ruby 日記 48日目: 継承順序
次のプログラムを実行するとどうなりますか
code:main.rb
module M1
def method_1
__method__
end
end
class C
include M1
end
p C.new.method_1
module M2
def method_2
__method__
end
end
module M1
include M2
end
p C.new.method_2
選択肢:
例外が発生する
code:sh
"method_1"
code:sh
"method_2"
code:sh
"method_1"
"method_2"
解説:
処理の順序は
1. クラスCにモジュールM1をインクルードする
2. p C.new.method_1
3. モジュールM1にモジュールM2をインクルードする
4. p C.new.method_2
となっている
1. の段階ではモジュールM2がインクルードされていないので、クラスCには method_2 が存在しない。
なので 4. で例外が発生する。
code:sh
# ruby gold/ex48/main.rb
:method_1
/icons/hr.icon
ん? __method__ は String じゃなくて Symbol を返すんだね。